package 线程池.Executors工具类实现线程池;

public class Test {
    public static void main(String[] args) {
        // Executors: 是一个线程池的工具类, 提供了很多静态方法用于返回不同特点的线程池对象

        // 方法名称
        // 1. public static ExecutorService newFixedThreadPool(int nThreads): 创建固定线程数量的线程池, 如果某个线程因为执行异常而结束吗那么线程池会补充一个新线程替代他
        // 2. public static ExecutorService newSingleThreadExecutor(): 创建只有一个线程池对象, 如果该线程出现异常而结束, 那么线程池会补充一个新线程.
        // 3. public static ExecutorService new CachedThreadPool(): 线程数量随着任务增加而增加, 如果线程任务执行完毕且空闲了60s则会被回收掉
        // 4. public static ScheduleExecutorService newScheduledThreadPool(int corePoolSize): 创建一个线程池, 可以实现再给定的延迟后运行任务, 或者定期执行任务
        // 注意: 这些方法的底层, 都是通过线程池的实现类ThreadPoolExecutor创建的线程池对象

        // 可以自己探索

        // 拓展: 核心线程数量到底配置多少呢
        // 计算密集型的任务: 核心线程数 = CPU的核数 + 1
        // IO密集型的任务: 核心线程数 = CPU的核数 * 2

        // 注意: Executors使用可能存在的陷阱
        //      大型并发系统环境中使用Executors如果不注意可能会出现系统风险
    }
}
